{
 "cells": [
  {
   "cell_type": "markdown",
   "id": "186a184e",
   "metadata": {},
   "source": [
    "## 第一步引入 torch"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "id": "2f90a87c",
   "metadata": {
    "scrolled": true
   },
   "outputs": [],
   "source": [
    "import torch\n",
    "import torch.nn as nn"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "3f32e2bd",
   "metadata": {},
   "source": [
    "## 第二步 利用torch搭建神经网络 AlexNet\n",
    "\n",
    "### Alexnet网络介绍:\n",
    "\n",
    "AlexNet是一个卷积神经网络，由亚历克斯·克里泽夫斯基（Alex Krizhevsky）设计，与伊尔亚‧苏茨克维（Ilya Sutskever）和克里泽夫斯基的博士导师杰弗里·辛顿共同发表，而辛顿最初抵制他的学生的想法。\n",
    "\n",
    "AlexNet参加了2012年9月30日举行的ImageNet大规模视觉识别挑战赛，达到最低的15.3%的Top-5错误率，比第二名低10.8个百分点。原论文的主要结论是，模型的深度对于提高性能至关重要，AlexNet的计算成本很高，但因在训练过程中使用了图形处理器（GPU）而使得计算具有可行性。\n",
    "\n",
    "影响\n",
    "AlexNet被认为是计算机视觉领域最有影响力的论文之一，它刺激了更多使用卷积神经网络和GPU来加速深度学习的论文的出现。截至2020年，AlexNet论文已被引用超过54,000次。"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "id": "ba6b78fa",
   "metadata": {},
   "outputs": [],
   "source": [
    "class AlexNet(nn.Module):\n",
    "    def __init__(self, num_classes=10, init_weights=False):\n",
    "        super(AlexNet, self).__init__()\n",
    "        # 使用nn.Sequential()将网络打包成一个模块\n",
    "        self.features = nn.Sequential(\n",
    "            # 设置传入的维度\n",
    "            nn.Conv2d(1, 32, kernel_size=3, padding=1),  # 28x28x1 ==> 28x28x32\n",
    "            nn.ReLU(inplace=True),                       # 28x28x32 ==> 28x28x32\n",
    "            nn.MaxPool2d(kernel_size=2, stride=2),       # 28x28x32 ==> 14x14x32\n",
    "            nn.Conv2d(32, 64, kernel_size=5, stride=1, padding=2),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.MaxPool2d(kernel_size=2,stride=2),\n",
    "            nn.Conv2d(64, 128, kernel_size=3, stride=1, padding=1),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.Conv2d(128, 256, kernel_size=3, stride=1, padding=1),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.Conv2d(256, 256, kernel_size=3, stride=1, padding=1),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.MaxPool2d(kernel_size=3, stride=2)  #3x3x256\n",
    "        )\n",
    "\n",
    "        self.classifier = nn.Sequential(\n",
    "            nn.Dropout(p=0.5),\n",
    "            nn.Linear(256*3*3, 1024),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.Dropout(p=0.5),\n",
    "            nn.Linear(1024, 512),\n",
    "            nn.ReLU(inplace=True),\n",
    "            nn.Linear(512, num_classes)\n",
    "        )\n",
    "\n",
    "        if init_weights:\n",
    "            self._initialize_weights()\n",
    "\n",
    "    #定义前向传播的过程\n",
    "    def forward(self, x):\n",
    "        x = self.features(x)\n",
    "        x = torch.flatten(x, start_dim=1)#二维图像进行扁平化成一维图像\n",
    "        x = self.classifier(x)#输出分类\n",
    "        return x\n",
    "\n",
    "    def _initialize_weights(self):\n",
    "        for m in self.modules():\n",
    "            if isinstance(m, nn.Conv2d):                            # 若是卷积层\n",
    "                nn.init.kaiming_normal_(m.weight, mode='fan_out',   # 用（何）kaiming_normal_法初始化权重\n",
    "                                        nonlinearity='relu')\n",
    "                if m.bias is not None:\n",
    "                    nn.init.constant_(m.bias, 0)                    # 初始化偏重为0\n",
    "            elif isinstance(m, nn.Linear):            # 若是全连接层\n",
    "                nn.init.normal_(m.weight, 0, 0.01)    # 正态分布初始化\n",
    "                nn.init.constant_(m.bias, 0)  "
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d7f9de89",
   "metadata": {},
   "source": [
    "## 第三步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "id": "b9f9c8f2",
   "metadata": {},
   "outputs": [],
   "source": [
    "from torchvision import datasets\n",
    "from torchvision.transforms import ToTensor"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "d8fc9937",
   "metadata": {},
   "source": [
    "## 第四步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "id": "393b89aa",
   "metadata": {},
   "outputs": [],
   "source": [
    "test_data = datasets.FashionMNIST(\n",
    "    root='/data',\n",
    "    train= False,\n",
    "    download=True,\n",
    "    transform=ToTensor()\n",
    ")"
   ]
  },
  {
   "cell_type": "markdown",
   "id": "2f25ed44",
   "metadata": {},
   "source": [
    "## 第五步"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "id": "e6def868",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "原始的维度 torch.Size([1, 28, 28])\n",
      "修改后的维度 torch.Size([1, 1, 28, 28])\n",
      "2\n"
     ]
    }
   ],
   "source": [
    "number_id = 1\n",
    "x,y = test_data[number_id][0],test_data[number_id][1]\n",
    "print(\"原始的维度\",x.shape)\n",
    "x=x.unsqueeze(0)\n",
    "print(\"修改后的维度\",x.shape)\n",
    "print(y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "id": "c35214bc",
   "metadata": {},
   "outputs": [],
   "source": [
    "classes = [\n",
    "    \"T-shirt/top\",\n",
    "    \"Trouser\",\n",
    "    \"Pullover\",\n",
    "    \"Dress\",\n",
    "    \"Coat\",\n",
    "    \"Sandal\",\n",
    "    \"Shirt\",\n",
    "    \"Sneaker\",\n",
    "    \"Bag\",\n",
    "    \"Ankle boot\",\n",
    "]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "id": "ab89203b",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "label Pullover\n"
     ]
    },
    {
     "data": {
      "image/png": "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48yXX35pnJGkr776yipnqru72zhjs5imZL9451Bl+/XExsZGZF/x8fHGmT179hhnbNl8TadPnzbO2CxoGw24BwQAcIICAgA4YVxAu3bt0sKFC5WdnS2fz6etW7eGXL9s2TL5fL6QbcGCBeGaFwAQJYwLqL29Xfn5+Vq3bt15b7NgwQI1Njb2b5s3b76oIQEA0cf4SQglJSUqKSm54G38fr8yMzOthwIARL9BeQyosrJS6enpmjJliu677z61tLSc97ZdXV1qbW0N2QAA0S/sBbRgwQK9+uqrqqio0HPPPaeqqiqVlJSot7d3wNuXl5crEAj0bzk5OeEeCQAwBIX9dUC33357/79nzJihmTNnatKkSaqsrNTcuXPPuX1ZWZlWr17d/3FrayslBACXgEF/GnZeXp7S0tJUW1s74PV+v1+jRo0K2QAA0W/QC6ihoUEtLS3Kysoa7F0BAIYR4z/BtbW1hdybqa+v14EDB5SamqrU1FQ99dRTWrJkiTIzM1VXV6eHH35YV1xxhebPnx/WwQEAw5txAe3bt0833nhj/8dfP36zdOlSrV+/XgcPHtQrr7yikydPKjs7W/PmzdMvf/lL+f3+8E0NABj2jAtozpw5F1yg7913372ogaJVSkqKcaarq8s4k5CQYJxpa2szzkjStGnTrHKmzvcMyguxWeTS1lBewNR2kUubr8kmY/NzEcnjbXP8YmLMH9kYO3ascSYasBYcAMAJCggA4AQFBABwggICADhBAQEAnKCAAABOUEAAACcoIACAExQQAMAJCggA4AQFBABwggICADhBAQEAnAj7W3JjYLGxscaZSK36W1NTY5WbNGlSmCcZmM1xsFmR2HZftitOR4LtOWRzvtqs3h4IBIwzx48fN87YsjkONudDWlqacSYacA8IAOAEBQQAcIICAgA4QQEBAJyggAAATlBAAAAnKCAAgBMUEADACQoIAOAEBQQAcIICAgA4QQEBAJxgMdIIGTHC/FD39vYOwiTn+vzzz61yRUVFYZ5kYDbHzpbNQpI2mUgtNGu7UKrNYq5nzpyx2pephoaGiGQkacyYMVY5U8nJyRHZz1DDPSAAgBMUEADACQoIAOAEBQQAcIICAgA4QQEBAJyggAAATlBAAAAnKCAAgBMUEADACQoIAOAEBQQAcILFSCPk9OnTxplILUba19dnlZs6dapxpqen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",
      "text/plain": [
       "<Figure size 640x480 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import matplotlib.pyplot as plt\n",
    "plt.imshow(x.squeeze(),cmap ='gray')\n",
    "print(\"label\",classes[y])"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "id": "a9031c7d",
   "metadata": {},
   "outputs": [
    {
     "name": "stdout",
     "output_type": "stream",
     "text": [
      "tensor([9, 2, 1, 1, 6, 1, 4, 6, 5, 7])\n"
     ]
    },
    {
     "data": {
      "image/png": "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//znP6WpCAQCEdvUckYmJqCQiQkoZGICeuRGxs05i+g8sUhtH+t6Q/TqCJaQYlxSUqLif/3rXyrGvHNzgR6ZtBhiFvKKFSvk+uuvl5ycHElISJA33nhDjX/ta1+ThIQE9ZoyZYp6z+HDh+X222+XlJQUSUtLk7vvvrvZzgYkPohZyMeOHZORI0fKnDlz6nzPlClTpKyszH+9+uqravz222+XzZs3y5IlS2ThwoWyYsUKuffee2O/e0LO4V0AIuItWLBA/dtdd93l3XDDDXV+ZsuWLZ6IeB9//LH/b++8846XkJDg7d27N6rrBgIBT0T4aiGvQCAQURMN4pGXLVsmmZmZMmjQILn//vvl0KFD/lhRUZGkpaWpvTby8/MlMTFRVq1aFfJ81dXVEgwG1YsQl3oX8pQpU+Sll16SwsJCeeqpp2T58uUydepUvzKrvLy8VkO81q1bS3p6ep3NoQsKCiQ1NdV/9ezZs75vm8Q59V7Gecstt/jHw4cPlxEjRki/fv1k2bJlcu21157XOWfPni0PPfSQHweDQYqZKBo8/da3b1/JyMjw63Kzs7Nl//796j1nzpyRw4cP17lOLDk5WVJSUtSLEJcGF/KePXvk0KFD0q1bNxH5957GlZWVsnbtWv89S5culZqaGhk/fnxD3w6xSlRpAoeqqipv3bp13rp16zwR8X7xi19469at83bv3u1VVVV53/ve97yioiJv586d3vvvv++NHj3aGzBggHfy5En/HFOmTPEuvvhib9WqVd6HH37oDRgwwLv11lujvgdmLVrWK5qsRcyPqJctWyZXX311rX+/66675Pnnn5fp06fLunXrpLKyUnJycmTSpEny05/+VD16PXz4sMyaNUveeustSUxMlBkzZsizzz5bq5t7XcTzI+ply5apGMs2cQmRW8aJXYci7ciKD5lwyRY+8p42bVrom25ionlEHfMfe1dddVXY9VjvvvtuxHOkp6fLK6+8EuulCakT1loQE1DIxARsB9DAoLcbOnSoijEVibjL8vv376/GcCclbAeA3TdxSX+ka8cTnJGJCShkYgIKmZiAHrmBwVwvpi5xd9JwrV5xF1XMC6Mfx2thHho71scznJGJCShkYgIKmZiAHrmBmTFjhoqxjVVpaamK0TO79RBYh4G1Em7rrlDnwvqUcxWJ5xgzZox/7FYnxgOckYkJKGRi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",
      "text/plain": [
       "<Figure size 1500x1500 with 1 Axes>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "import numpy as np\n",
    "import torchvision\n",
    "test_loader = torch.utils.data.DataLoader(test_data,batch_size = 10)#\n",
    "batch = next(iter(test_loader))#\n",
    "images,labels = batch#\n",
    "grid = torchvision.utils.make_grid(images,nrow = 1)#\n",
    "plt.figure(figsize=(15,15))\n",
    "plt.imshow(np.transpose(grid,(1,2,0)))\n",
    "print(labels)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "id": "4f4ac970",
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "dl4human",
   "language": "python",
   "name": "dl4human"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.9.18"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 5
}
